#include <stdio.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <stdbool.h>
#include "msg_queue.h"

static int msgid_ctos;
static int msgid_stoc;

static Msg msg_ctos;
static Msg msg_stoc;

static void login_confirm(void)
{
	User user = {};
	char path[50] = "user/";
	sprintf(path,"%s%d",path,msg_ctos.user.account);
	strcat(path,".txt");
	puts(path);
	if(0 > access(path,F_OK))
	{
		strcpy(msg_stoc.result,"账号不存在");
		return;
	}
	int fd = open(path,O_RDONLY);
	if(0 > fd)
	{
		perror("open");
		strcpy(msg_stoc.result,"服务器升级中");
		return;
	}
	if(0 > read(fd,&user,sizeof(User)))
	{
		perror("read");
		strcpy(msg_stoc.result,"服务器升级中");
		return;
	}
	puts(user.pwd);
	if(0 == strcmp(user.pwd,msg_ctos.user.pwd)&&user.cnt<3)
	{
		strcpy(msg_stoc.result,"登录成功");
		return;
	}
	else
	{
		user.cnt++;
		save_data(path,user);
	}
	if(3 > user.cnt)
	{
		strcpy(msg_stoc.result,"登录失败，你还有");
		sprintf(msg_stoc.result,"%s%d次机会",msg_stoc.result,3-user.cnt);
	}
	else
	{
		strcpy(msg_stoc.result,"账号被锁定");
	}
	close(fd);
	return;
}

int main()
{
	while(1)
	{
		msgid_ctos = get_ctos_msg();
		msgid_stoc = get_stoc_msg();
		if(0 == msgrcv(msgid_ctos,&msg_ctos,sizeof(Msg),TYPE_LOGIN,0))
		{
			perror("msgrcv");
		}
		printf("%d %s\n",msg_ctos.user.account,msg_ctos.user.pwd);
		printf("----gggggg------\n");
		login_confirm();
		msg_stoc.type = msg_ctos.pid;
		if(0 > msgsnd(msgid_stoc,&msg_stoc,sizeof(Msg)-sizeof(msg_stoc.type),0))
		{
			perror("server:msgsnd");
		}
	}
}
